home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995 June: Reference Library / Dev.CD Jun 95 / Dev.CD Jun 95.toast / What's New? / New System Software Extensions / QuickDraw 3D ß / Programming / SampleCode / VCDemo / Source / MenuDispatch.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-03-17  |  4.4 KB  |  236 lines  |  [TEXT/MPCC]

  1. /*
  2.     MenuDispatch.c
  3.  
  4.     Handle menu commands. 
  5.  
  6.     © 1995 Apple Computer, Inc.
  7. */
  8. #include <QuickDraw.h>
  9. #include <Windows.h>
  10. #include <Menus.h>
  11. #include <Files.h>
  12. #include <StandardFile.h>
  13. #include <Desk.h>
  14.  
  15. #include "EventLoop.h"
  16. #include "MenuDispatch.h"
  17. #include "vcInterface.h"
  18.  
  19. void BuildMenuBars(void);
  20. void ChooseApple(short itemNumber);
  21. void ChooseFile(short item);
  22. void ChooseEdit(short item);
  23. void MenuDispatch(short menuNumber,short itemNumber);
  24. void RunDeskAccesory(short item);
  25. void AdjustMenuItems(void);
  26.  
  27. extern void ChooseView(short item);
  28. extern void ChooseTest(short item);
  29.  
  30. extern WindowPtr    MainView;
  31. extern ViewerObject    gViewer;
  32.  
  33. void BuildMenuBars(void)
  34. {    
  35.     SetMenuBar(GetNewMBar(128));
  36.     AddResMenu(GetMHandle(APPLE_MENU),'DRVR');
  37.     DrawMenuBar();
  38. }
  39.  
  40. void RunDeskAccesory(short item)
  41. {
  42.     GrafPtr        savePort;
  43.     short        daRefNum;
  44.     Str255        daName;
  45.     
  46.     GetPort(&savePort);
  47.     GetItem(GetMHandle(APPLE_MENU), item, daName);
  48.     daRefNum = OpenDeskAcc(daName);
  49.     SetPort(savePort);
  50. }
  51.  
  52. void ChooseApple(short itemNumber)
  53. {
  54.     short item;
  55.     
  56.     if(itemNumber == cmdAbout) {
  57.         item = Alert(ABOUT_BOX_ID,nil);
  58.     } else {
  59.         RunDeskAccesory(itemNumber);
  60.     }
  61. }
  62.  
  63. void ChooseFile(short item)
  64. {
  65.     switch(item)
  66.     {
  67.         case cmdNew:
  68.         {
  69.             Rect    defaultBounds = {50, 50, 300, 300};
  70.  
  71.             ChooseFile(cmdClose);
  72.             MainView = GetNewCWindow(128, nil, (WindowPtr)-1L);
  73.             gViewer = Q3ViewerNew((CGrafPtr)MainView, &MainView->portRect, vcDefault);
  74.             break;
  75.         }
  76.  
  77.         case cmdOpen:
  78.         {
  79.             short                refNum;
  80.             OSErr                anErr = noErr;
  81.             short                numTypes;
  82.             OSType                typeList[2];
  83.             StandardFileReply    sfReply;
  84.  
  85.             numTypes = 2;
  86.             typeList[0] = '3DMF';
  87.             typeList[1] = 'TEXT';
  88.             StandardGetFile(nil, numTypes, typeList, &sfReply);
  89.             if (sfReply.sfGood)
  90.             {
  91.                 anErr = FSpOpenDF(&sfReply.sfFile, fsCurPerm, &refNum);
  92.                 if (anErr == noErr)
  93.                 {
  94.                     Q3ViewerUseFile(gViewer, refNum);
  95.                     anErr = FSClose(refNum);
  96.                 }
  97.             }
  98.             break;
  99.         }
  100.  
  101.         case cmdClose:
  102.         {
  103.             if (gViewer)
  104.             {
  105.                 Q3ViewerDispose(gViewer);
  106.                 gViewer = nil;
  107.             }
  108.             if (MainView)
  109.             {
  110.                 DisposeWindow(MainView);
  111.                 MainView = nil;
  112.             }
  113.             break;
  114.         }
  115.  
  116.         case cmdSave:
  117.         case cmdSaveAs:
  118.         {
  119.             short                refNum;
  120.             OSErr                anErr = noErr;
  121.             StandardFileReply    sfReply;
  122.  
  123.             if ((!MainView) || (!gViewer))
  124.                 break;
  125.             StandardPutFile("\pSave model as:", "\pUntitled", &sfReply);
  126.             if (sfReply.sfGood)
  127.             {
  128.                 anErr = FSpOpenDF(&sfReply.sfFile, fsCurPerm, &refNum);
  129.                 if (anErr != noErr)
  130.                 {
  131.                     anErr = FSpCreate(&sfReply.sfFile, 'QD3A', '3DMF', sfReply.sfScript);
  132.                     if (anErr == noErr)
  133.                         anErr = FSpOpenDF(&sfReply.sfFile, fsCurPerm, &refNum);
  134.                 }
  135.                 if (anErr == noErr)
  136.                 {
  137.                     Q3ViewerWriteFile(gViewer, refNum);
  138.                     anErr = FSClose(refNum);
  139.                 }
  140.             }
  141.             break;
  142.         }
  143.  
  144.         case cmdQuit:
  145.             ChooseFile(cmdClose);
  146.             Done = true;
  147.             break;
  148.  
  149.         default:
  150.             break;
  151.     }
  152. }
  153.  
  154.  
  155. void ChooseEdit(short item)
  156. {
  157.     switch(item)
  158.     {
  159.         case cmdCut:
  160.             Q3ViewerCut(gViewer);
  161.             break;
  162.         case cmdCopy:
  163.             Q3ViewerCopy(gViewer);
  164.             break;
  165.         case cmdPaste:
  166.             Q3ViewerPaste(gViewer);
  167.             break;
  168.         case cmdClear:
  169.             Q3ViewerClear(gViewer);
  170.             break;
  171.         default:
  172.             break;
  173.     }
  174. }
  175.  
  176. void MenuDispatch(short menuNumber,short itemNumber)
  177. {
  178.  
  179.     if(menuNumber != 0)
  180.         switch(menuNumber) {
  181.             case APPLE_MENU :     ChooseApple(itemNumber);
  182.                                 break;
  183.             case FILE_MENU :    ChooseFile(itemNumber);
  184.                                 break;
  185.             case EDIT_MENU :    ChooseEdit(itemNumber);
  186.                                 break;
  187.             case VIEW_MENU :    ChooseView(itemNumber);
  188.                                 break;
  189.             case TEST_MENU :    ChooseTest(itemNumber);
  190.                                 break;
  191.             default :            break;
  192.         }
  193. }
  194.  
  195. void AdjustMenuItems(void)
  196. {
  197.     MenuHandle    menu;
  198.     long        viewerFlags;
  199.     Boolean        checked;
  200.  
  201.     menu = GetMHandle(VIEW_MENU);
  202.     viewerFlags = Q3ViewerGetFlags(gViewer);
  203.  
  204.     checked = (viewerFlags & vcShowBadge);
  205.     CheckItem(menu, cmdBadge, checked);
  206.  
  207.     checked = (viewerFlags & vcViewerVisible);
  208.     CheckItem(menu, cmdViewer, checked);
  209.  
  210.     checked = (viewerFlags & vcControllerVisible);
  211.     CheckItem(menu, cmdController, checked);
  212.  
  213.     checked = (viewerFlags & vcButtonCamera);
  214.     CheckItem(menu, cmdBtnCamera, checked);
  215.  
  216.     checked = (viewerFlags & vcButtonTruck);
  217.     CheckItem(menu, cmdBtnTruck, checked);
  218.  
  219.     checked = (viewerFlags & vcButtonOrbit);
  220.     CheckItem(menu, cmdBtnOrbit, checked);
  221.  
  222.     checked = (viewerFlags & vcButtonZoom);
  223.     CheckItem(menu, cmdBtnZoom, checked);
  224.  
  225.     checked = (viewerFlags & vcButtonDolly);
  226.     CheckItem(menu, cmdBtnDolly, checked);
  227.  
  228.     checked = (viewerFlags & vcDrawFrame);
  229.     CheckItem(menu, cmdFrame, checked);
  230.  
  231.     menu = GetMHandle(TEST_MENU);
  232.     CheckItem(menu, cmdNormalMemory, true);
  233. }
  234.  
  235. /* EOF */
  236.